package servlets;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import coneccion.DocumentoIdentidadConsultas;
import coneccion.CandidatosConsultas;
import coneccion.EstudiantesConsultas;
import coneccion.PropiedadesSistemaConsultas;
import coneccion.RolesConsultas;
import coneccion.UsuariosConsultas;

import objetos.DocumentoIdentidad;
import objetos.Candidato;
import objetos.Rol;
import objetos.Usuario;
import utils.Constantes;

/**
 * 
 */
public class Votacion extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public Votacion() {
        super();

    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		processRequest(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		processRequest(request, response);
	}
	
	protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
		
		request.setCharacterEncoding( "UTF-8");
		
		String estadoVotacionSet = request.getParameter("estadoVotacionSet");
		Boolean error = null; 
		PropiedadesSistemaConsultas propiedadesSistemaConsultas = new PropiedadesSistemaConsultas();
		String estadoActualVotacion = propiedadesSistemaConsultas.getEstadoVotacion();

		EstudiantesConsultas estudiantesConsultas = new EstudiantesConsultas();
		Integer cantidadVotantes = estudiantesConsultas.getCantidadEstudiantes(null);
		//calculo cantidad de votantes
		Usuario presMesaBusqueda = new Usuario();
		Rol rolPresmesa = new Rol();
		rolPresmesa.setNombre(Constantes.ROLES_USUARIOS_PRESIDENTE_MESA);
		List<Rol> rolesBusqueda = new ArrayList<Rol>();
		rolesBusqueda.add(rolPresmesa);
		presMesaBusqueda.setRoles(rolesBusqueda);
		//calculo cantidad mesas
		UsuariosConsultas usuariosConsultas = new UsuariosConsultas();
		Integer cantidadMesas = usuariosConsultas.getCantidadUsuarios(presMesaBusqueda);
		//calculo cantidad de votantes por mesas
		Integer cantidadVotantesPorMesa = new Integer(10);
		if(cantidadVotantes!=null && cantidadVotantes.intValue()>0 && cantidadMesas!=null && cantidadMesas.intValue()>0){
			cantidadVotantesPorMesa = cantidadVotantes.intValue()/cantidadMesas.intValue();
		}
		if(cantidadVotantesPorMesa.intValue()<10){
			cantidadVotantesPorMesa = Integer.valueOf(10);
		}
		
		//verifico estado de votacion
		if(Constantes.ESTADO_VOTACION_PREPARACION.equals(estadoActualVotacion) && Constantes.ESTADO_VOTACION_INICIADA.equals(estadoVotacionSet)){
			Boolean commit = PropiedadesSistemaConsultas.setEstadoVotacion(Constantes.ESTADO_VOTACION_INICIADA); 
			error = ! commit.booleanValue();
			estadoActualVotacion = propiedadesSistemaConsultas.getEstadoVotacion();
			
		}else if(Constantes.ESTADO_VOTACION_INICIADA.equals(estadoActualVotacion) && Constantes.ESTADO_VOTACION_FINALIZADA.equals(estadoVotacionSet)){
			Boolean commit = PropiedadesSistemaConsultas.setEstadoVotacion(Constantes.ESTADO_VOTACION_FINALIZADA);
			error= ! commit.booleanValue();
			estadoActualVotacion = propiedadesSistemaConsultas.getEstadoVotacion();
		}else if(Constantes.ESTADO_VOTACION_FINALIZADA.equals(estadoActualVotacion) && Constantes.ESTADO_VOTACION_PREPARACION.equals(estadoVotacionSet)){
			Boolean commit = PropiedadesSistemaConsultas.setEstadoVotacion(Constantes.ESTADO_VOTACION_PREPARACION);
			error = ! commit.booleanValue();
			estadoActualVotacion = propiedadesSistemaConsultas.getEstadoVotacion();
		}
		
		
		request.setAttribute("estadoActualVotacion", estadoActualVotacion);
		request.setAttribute("cantidadVotantes", cantidadVotantes);
		request.setAttribute("cantidadMesas", cantidadMesas);
		request.setAttribute("cantidadVotantesPorMesa", cantidadVotantesPorMesa);
		request.setAttribute("error", error);
		RequestDispatcher disp = request.getRequestDispatcher("pages/admin/votacion.jsp");
		disp.forward(request, response);
	}

}
